#ifndef TERRITORIO_H_
#define TERRITORIO_H_

#include "Observable.h"
#include <string>
#include <map>
#include "Continente.h"
using namespace std;

class Territorio : public Observable{

private:
	string nombre;
	Continente* continente;
	int x, y;
	unsigned int ejercitos;
	string colorJugador;
	map<string,Territorio*> territoriosAdyacentes;
public:
	Territorio(string nombre, int x, int y, Continente* continente);
	string getNombre();
	Continente* getContinente();
	int getX();
	int getY();
	void setX(int x);
	void setY(int y);
	virtual void colocarEjercitos(unsigned int cantidadDeEjercitos, string color);
	virtual void quitarEjercitos(unsigned int cantidadDeEjercitos);
	virtual void setEjercitos(unsigned int cantidadDeEjercitos,string color);
	int getEjercitos();
	string getJugador();
	virtual void setJugador(string colorJugador);
	bool hayEjercitos();
	
	/*@deprecated */
	bool enPoderDeJugador(string color);
	
	void setEnPoderDe(string colorJugador);
	string getEnPoderDe();
	unsigned int getCantidadDeEjercitos();
	void agregarAdyacencia(Territorio* territorio);
	bool esAdyacente(Territorio* unTerritorio);
	map<string,Territorio*>* obtenerTerritoriosAdyacentes();
	
	virtual ~Territorio();
};

#endif /*TERRITORIO_H_*/
